package com.mohunhun.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 文件哈希工具类
 */
public class FileHashUtils {

    /**
     * 计算字节数组的 SHA-256 哈希值（十六进制字符串）
     *
     * @param fileBytes 文件字节数组
     * @return SHA-256 哈希字符串（小写）
     * @throws IllegalArgumentException 当无法计算哈希时抛出
     */
    public static String computeSHA256(byte[] fileBytes) {
        if (fileBytes == null) {
            throw new IllegalArgumentException("文件字节数组不能为 null");
        }
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hashBytes = digest.digest(fileBytes);
            StringBuilder hexString = new StringBuilder();
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            // SHA-256 是 Java 标准算法，正常情况下不会抛出此异常
            throw new IllegalStateException("不支持 SHA-256 算法", e);
        }
    }
}